Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Reconciling the results of `intreg` and `oprobit`

    First post, so please excuse formatting faux-pas.

    I'm having difficulty reconciling intreg and oprobit results.

    Conceptually, the two are very similar, with the difference being that in an interval regression we know the cut thresholds. This intuition is supported by: Interval Regression | Stata Data Analysis Examples (ucla.edu)

    This led me to try the following:

    ```
    clear
    set seed 4321
    set obs 10000

    ///
    /// Generate some data that has 6 bins
    ///

    gen x1 = rnormal()
    gen x2 = rnormal()
    gen x3 = rnormal()
    gen ystar = 1*x1 + 2*x2 + 3*x3 +rnormal()*0.2
    drop if ystar < -3 | ystar > 3
    quietly sum ystar
    local bottom=floor(`r(min)')
    local top=ceil(`r(max)')
    egen y = cut(y), at(`bottom'(1)`top')

    ///
    /// Try fitting an unconstrained probit model to the data
    ///

    oprobit y x1 x2 x3

    ///
    /// We see that the scaling is wrong
    /// This is because the scaling of the residuals is assumed to be 1, whereas ours are 0.2
    /// Otherwise, the coefficients are close to the data generating process
    ///

    constraint define 1 /cut1=-2
    constraint define 2 /cut2=/cut1+1
    constraint define 3 /cut3=/cut2+1
    constraint define 4 /cut4=/cut3+1
    constraint define 5 /cut5=/cut4+1
    oprobit y x1 x2 x3, constraints(1/5)

    ///
    /// This doesn't seem to work well, not sure why?
    ///

    ///
    /// If we use Stata's built in `intreg' command to handle this, it works well
    ///

    gen ll = floor(ystar)
    gen ul = ceil(ystar)

    intreg ll ul x1 x2 x3
    ```

    Can someone tell me what's the difference between providing the thresholds in the form of constraints, versus as intervals for intreg?

  • #2
    Hi Geoff
    I think you answer this question yourself already:
    ///
    /// We see that the scaling is wrong
    /// This is because the scaling of the residuals is assumed to be 1, whereas ours are 0.2
    /// Otherwise, the coefficients are close to the data generating process
    As you already pointout, oprobit imposes the restriction that the latent error standard deviation is 1. You cannot modify this. So, changing the cutoffs does not help, but rather creates a problem, because the values you choose are far from the solution.

    In contrast, -intreg- does not impose any constrain on the standard deviation, which is why it replicates the DGP.
    HTH
    Last edited by FernandoRios; 28 Sep 2021, 07:27.

    Comment


    • #3
      Got it, I guess that further convinces me that intreg is the right tool for the job.

      I'm a bit surprised that oprobit doesnt have options allowing for alternative identifying assumptions using cutoffs rather than using the standard deviation of the latent errors.

      Comment


      • #4
        intreg and oprobit are good examples of two commands that estimate models with similar statistical structures but which are intended for very different problems. With intreg, the data are censored -- put into known bins. That's why we know the cut points because we know the censoring scheme. You are interested in a linear model for the underlying uncensored variable. If you could observe y* you would just use OLS in the linear model y* = xb + u. The variable y* here is meaningful (such as wealth or income) but it's been censored.

        With ordered probit, the latent variable y* is simple a construct used to generate the discrete, ordered variable that we care about, y. We assume y is generated by the latent variable y* crossing unknown thresholds. So a normalization is needed, and that's to set the error variance in the y* equation to unity. With oprobit, we don't care about y*. We want to estimate P(y = j|x) for the different outcomes j and see how they change with x. The variable y is not "censored"; it's just something like a credit rating or happiness measure, and we want a sensible way to model it.

        Comment


        • #5
          Thanks for going through the motivation

          Comment

          Working...
          X